﻿/* File 扩展类
 */

/* 未完事项
 * 1、单元测试。
 */
namespace LSLib.IO
{
    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.IO;
    using System.Windows.Forms;

    public class FileEx
    {
        /// <summary>文件重命名
        /// </summary>
        /// <param name="sourceFile">需要重命名的原文件</param>
        /// <param name="newFileName">新的文件名</param>
        public static bool Rename(string sourceFile, string newFileName)
        {
            if (File.Exists(sourceFile) == false) throw new FileNotFoundException("待重命名的文件不存在!", sourceFile);
            if (string.IsNullOrEmpty(newFileName)) throw new ArgumentNullException("newFileName");

            newFileName = string.Concat(Path.GetFileNameWithoutExtension(newFileName), Path.GetExtension(sourceFile));
            string destFile = Path.Combine(Path.GetDirectoryName(sourceFile), newFileName);

            File.Move(sourceFile, destFile);
            return File.Exists(destFile);
        }

        #region 复制文件到【系统剪贴板】
        /// <summary>复制文件到【系统剪贴板】
        /// </summary>
        public static void CopyFile2Clipboard(List<string> files)
        {
            CopyFile2Clipboard(files.ToArray());
        }
        /// <summary>复制文件到【系统剪贴板】
        /// </summary>
        public static void CopyFile2Clipboard(params string[] files)
        {
            if (files == null) throw new ArgumentNullException("files");
            if (files.Length == 0) return;

            StringCollection filePaths = new StringCollection();
            filePaths.AddRange(files);
            Clipboard.SetFileDropList(filePaths);
        }
        #endregion

        /// <summary>检测该字符是否可用于文件名中
        /// </summary>
        /// <param name="fileNameChar">文件名中的字符</param>
        /// <returns>可用：true；不可用：false。</returns>
        public static bool IsUseableFileNameChar(char fileNameChar)
        {
            List<char> list = new List<char>(Path.GetInvalidFileNameChars());
            return list.Contains(fileNameChar) == false;
        }
    }
}